package com.zisu.a996.stream;

import com.alibaba.fastjson.JSON;
import com.zisu.a996.lambda.cart.CartService;
import com.zisu.a996.lambda.cart.Sku;
import org.junit.Test;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/27 14:08
 * @Version 1.0
 *
 * 常见预定义收集器使用
 * ( 处理好的流 收集成一个List )
 */
public class StreamCollector {
    /**
     * 集合收集器
     **/
    @Test
    public void toList(){
        List<Sku> cartSkuList = CartService.getCartSkuList();
        List<Sku> collect = cartSkuList.stream()
                .collect(Collectors.toList());
        System.out.println(JSON.toJSONString(collect,true));
    }

    /**
     * 收集过来的数据 分组
     **/
    @Test
    public void toGroup(){
        List<Sku> cartSkuList = CartService.getCartSkuList();
        // Map<分组条件，结果集合>
        Map<Enum, List<Sku>> collect = cartSkuList.stream()
                .collect(Collectors.groupingBy(
                        //groupingBy 接受的是一个function，接受一个参数，返回一个参数，返回的那个值 就是你用来分类的依据。
                        sku -> sku.getSkuCategory()
                ));
        System.out.println(JSON.toJSONString(collect,true));
    }

    /**
     * 收集过来的数据 分区
     * 只有两个区：return为true 的为一个区，return 为false 的为一个区
     **/
    @Test
    public void partition(){
        List<Sku> cartSkuList = CartService.getCartSkuList();
        Map<Boolean, List<Sku>> collect = cartSkuList.stream()
                .collect(Collectors.partitioningBy(sku -> sku.getTotalPrice() > 1000));
        System.out.println(JSON.toJSONString(collect,true));
    }
}

